home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 4.iso / public / Xprof / xprof / common.h next >
C/C++ Source or Header  |  1994-08-01  |  5KB  |  140 lines

  1. /*==================================================================
  2.  *      File :          common.h
  3.  *      Package:        Xprof
  4.  *
  5.  *      Author :        Aloke Gupta.
  6.  *
  7.  *  (C) Copyright 1992, Aloke Gupta.
  8.  *==================================================================*/
  9.  
  10. /* 
  11.  * Declarations shared by the trace analysis routines
  12.  *
  13.  * Note: The size, in bytes, of each message can be obtained from the
  14.  * "request length" parameter in the xscope printout as follows:
  15.  *        request bytes = (length * 4)
  16.  *        reply   bytes = (length * 4) + 32
  17.  *        event   bytes = 32
  18.  *        error   bytes = 32
  19.  */
  20.  
  21. #ifndef _COMMON_H_
  22. #define _COMMON_H_
  23.  
  24. #include <string.h>
  25. #include <math.h>
  26. #include <ctype.h>
  27. #include <values.h>
  28. #include <malloc.h>
  29.  
  30. #define MAXSTRINGSIZE   16384    /* Conservative large value */
  31. #define MAXBUCKETS_IAT     32     /* Array size for inter-arrival time stats */
  32. extern  int MAXBUCKETS_SIZE;    /* Array size for size stats */
  33.  
  34. /* Maximum number of messages of each category */
  35. #define MAXREQUESTS    128
  36. #define MAXREPLIES     41
  37. #define MAXEVENTS     34
  38. #define MAXERRORS     17
  39.  
  40. /* The following are defined in main.c */
  41. extern long  _LINE_NUM;
  42. extern int   debuglevel;
  43. extern int   verboselevel;
  44.  
  45. typedef enum {
  46.     TRUE = 1, FALSE = 0
  47. } Boolean;
  48.  
  49. typedef enum {            /* mnemonics for FALSE and TRUE */
  50.     TERSE = 0, DETAILED = 1
  51. } Detailed;
  52.  
  53. /* Define macros to extract log2 and antilog of a number. These macros are
  54.  * duals of each other. Remember to include math.h
  55.  * These functions succesfully handle a zero value, and perform roundoff for
  56.  * other cases.
  57.  */
  58.  
  59. /*
  60. #define mylog2(number) (log2((double) number  + 1) + 0.5)
  61. #define myexp2(number) (exp2((double) number) - 1)
  62. */
  63.  
  64. #define mylog2(number) ((log((double) number + 1) / log((double) 2.0)) + 0.5)
  65. #define myexp2(number) ((exp((double) number * log((double) 2.0))) - 1)
  66.  
  67. /*
  68.  * GlobalStats contains the totals for client, server, requests, replies, and
  69.  * events.
  70.  */
  71. typedef struct {
  72.     long current_time;        /* The current value of the timestamp in ms   */
  73.     long last_time;        /* The previous  value of the timestamp in ms */
  74.     /* In the following counts, the following relationships should hold:
  75.      *    client_bytes = request_bytes
  76.      *    server_bytes = reply_bytes + event_bytes + error_bytes
  77.      */
  78.     unsigned long client_bytes;    /* Total number of bytes from client */
  79.     unsigned long server_bytes;    /* Total number of bytes from server */
  80.  
  81.     /* The following information is redundant since it is maintained in the
  82.      * MsgStats structures corresponding to each of the message types. Still
  83.      * I maintain it.
  84.      */
  85.     unsigned long request_bytes;/* Total number of bytes of request messages */ 
  86.     unsigned long reply_bytes;    /* Total number of bytes of reply messages */ 
  87.     unsigned long event_bytes;    /* Total number of bytes of event messages */ 
  88.     unsigned long error_bytes;    /* Total number of bytes of error messages */ 
  89. } GlobalStats;
  90.  
  91. typedef enum {            /* Grain sizes for the processed statistics */
  92.     GRAIN1  =  1, GRAIN2  =  2, GRAIN4   =   4, GRAIN8   =   8, GRAIN10  =  10,
  93.     GRAIN16 = 16, GRAIN32 = 32, GRAIN128 = 128, GRAIN256 = 256, GRAIN512 = 512
  94. } Grain;
  95.  
  96. #define IAT_GRAIN GRAIN10    /* Interarrival time grain size in ms */
  97.  
  98. typedef enum {            /* Are the buckets linear or log2 ? */
  99.     LINEAR, LOG2
  100. } StatsType;
  101.  
  102. /* The following structure is a generic structure to collect information for
  103.  * an arbitrary Xlib message.
  104.  * The "iat_distbn", and "size_distbn" arrays are malloced only for the messages
  105.  * for which we collect detailed statistics.
  106.  */
  107. typedef struct _MsgStats{
  108.     Boolean  invoked;        /* Has this structure been invoked ?*/
  109.     long     number;        /* Total number of these messages seen */
  110.     long     total_bytes;    /* Total number of bytes seen for this message*/
  111.     long     last_time;        /* What was the time stamp of last message ?*/
  112.  
  113.     Grain    size_grain;    /* Size grain for this measurement */
  114.     Detailed detailed;        /* Are we maintaining detailed information ? The
  115.                           following are updated only if this is TRUE */
  116.     long     *iat_distbn;    /* Interarrival time distribution */
  117.     long     min_iat, max_iat;    /* Range of values of the raw data */
  118.     long     *size_distbn;    /* Size distribution */
  119.     long     min_size, max_size;
  120. } MsgStats;    
  121.  
  122. typedef enum {
  123.     WIN, GFX, TXT
  124. } MsgClass;
  125.  
  126. /* 
  127.  * The following structure encapsulates information about a message and the
  128.  * action to be taken to process it.
  129.  */
  130. typedef struct _MsgType{
  131.     int      number;        /* Xlib number for this message */
  132.     char     *name;        /* Symbolic name for this message */
  133.     MsgClass msgclass;        /* Is this a windowing or graphics message ? */
  134.     long     (*action)(/* FILE *fp, int number, int timestamp */);
  135.                 /* Action to take to process this message */
  136.     Detailed detailed;        /* Maintain detailed statistics for this ? */
  137.     Grain    size_grain;    /* Size grain for this measurement ? */
  138. } MsgType;
  139. #endif    /* ifndef _COMMON_H_ */
  140.